home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / net / getservbyname.c < prev    next >
C/C++ Source or Header  |  1988-07-01  |  1KB  |  44 lines

  1. /*
  2.  * Copyright (c) 1983 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms are permitted
  6.  * provided that this notice is preserved and that due credit is given
  7.  * to the University of California at Berkeley. The name of the University
  8.  * may not be used to endorse or promote products derived from this
  9.  * software without specific prior written permission. This software
  10.  * is provided ``as is'' without express or implied warranty.
  11.  */
  12.  
  13. #if defined(LIBC_SCCS) && !defined(lint)
  14. static char sccsid[] = "@(#)getservbyname.c    5.4 (Berkeley) 3/7/88";
  15. #endif /* LIBC_SCCS and not lint */
  16.  
  17. #include <netdb.h>
  18.  
  19. extern int _serv_stayopen;
  20.  
  21. struct servent *
  22. getservbyname(name, proto)
  23.     char *name, *proto;
  24. {
  25.     register struct servent *p;
  26.     register char **cp;
  27.  
  28.     setservent(_serv_stayopen);
  29.     while (p = getservent()) {
  30.         if (strcmp(name, p->s_name) == 0)
  31.             goto gotname;
  32.         for (cp = p->s_aliases; *cp; cp++)
  33.             if (strcmp(name, *cp) == 0)
  34.                 goto gotname;
  35.         continue;
  36. gotname:
  37.         if (proto == 0 || strcmp(p->s_proto, proto) == 0)
  38.             break;
  39.     }
  40.     if (!_serv_stayopen)
  41.         endservent();
  42.     return (p);
  43. }
  44.